package com.manor.common.http

import com.alibaba.fastjson.JSON
import com.alibaba.fastjson.JSONArray
import com.alibaba.fastjson.JSONObject
import com.blankj.utilcode.util.EncryptUtils
import com.manor.common.ktx.toEncrypt
import com.manor.common.ktx.toGsonArr
import com.manor.common.ktx.toJson
import com.manor.common.utils.Gson2Util
import com.manor.common.utils.KLog
import com.manor.common.utils.StringUtil
import okhttp3.MediaType
import okhttp3.RequestBody
import okio.internal.commonToUtf8String

/**
 * 我只是一个小萌新
 * 苍天保佑
 * 后台给的数据少点坑

 * @version 1.0
 *
 * @date 2020/7/29  11:53
 */
object PitUtil {
    /**
     *
     *
     * "data": {
     * "code": 0,
     * "msg": "",
     * "info": [
     * [
     * {
     * "name": "迪迪丫",
     * "isauth": "1",
     * "id": "9274"
     * }
     * ]
     * ]
     *
     * 去掉一层`JsonArray`
     * 我也不知道为什么有这种套两层JsonArray的神仙操作.
     * 当前统一处理数据，碰到这种格式数据，调用[PitUtil.strGetFirst]得到预期数据.
     * 至于为啥返回String，为了避免哪天又要把外层的去掉方便删代码.
     */
    @JvmStatic
    fun strGetFirst(info: String?): String {
        KLog.i("PitStrGetFirst", info)
        if (StringUtil.isEmpty(info)) return ""
        val array: JSONArray? = JSON.parseArray(info)
        if (array?.size ?: 0 <= 0) return ""
        if (array?.get(0) is JSONObject) return array.getJSONObject(0).toJSONString()
        return if (array?.get(0) is JSONArray) array.getJSONArray(0).toJSONString() else array?.get(0).toString()
    }

    private val TYPE_JSON = MediaType.parse("application/json;charset=utf-8")
    private val SB_ZZ = "x2sfXKsQsiT4okTp".toByteArray(Charsets.UTF_8)
    private val TRANS = "AES/ECB/PKCS5Padding"

    /**
     * 接口加密
     */
    @JvmStatic
    fun getBody(map: LinkedHashMap<String, Any>): RequestBody {
        KLog.e("PitUtil#getBody", map)

//        return RequestBody.create(TYPE_JSON, Gson2Util.toJson(map))
        return RequestBody.create(TYPE_JSON, Gson2Util.toJson( linkedMapOf("json" to map.toJson().toEncrypt())))
    }


    @JvmStatic
    fun getSignBody(map: LinkedHashMap<String, Any>): RequestBody {
        KLog.e("PitUtil#getSignBody", map)
//        val json = EncryptUtils.encryptAES2Base64(map.toGsonArr(), SB_ZZ, TRANS, null)?.commonToUtf8String() ?: ""
//        val data = linkedMapOf("json" to json)
//        return RequestBody.create(TYPE_JSON, Gson2Util.toJson(data))
//        return RequestBody.create(TYPE_JSON, Gson2Util.toJson(map))
        return RequestBody.create(TYPE_JSON, Gson2Util.toJson( linkedMapOf("json" to map.toJson().toEncrypt())))
    }





}